﻿using System;
using System.Collections.Generic;
using System.Text;

namespace TestKontrole2 {
    public class Uzorak: ISkup{
        private List<IElement> dodatneStavke;
        private string id;
        private List<IElement> elementi;
        private int trenutnaDS;

        public Uzorak() {
            trenutnaDS = -1;  
            elementi = new List<IElement>();
            dodatneStavke = new List<IElement>();
        }
        public Uzorak(List<IElement> elem, List<IElement> dodatneS):this() {
            foreach (IElement item in elem) {
                elementi.Add(item);
            }
            foreach (IElement item in dodatneS) {
                dodatneStavke.Add(item);
            }
        }

        public List<IElement> getAllElement() {
            return elementi;
        }

        public IElement getElementByID(int idElementa) {
            foreach (IElement item in elementi) {
                if (item.getID() == idElementa)
                    return item;
            }
            throw new iznimke.ElementNotExistException();
        }

        public IElement getNextDodatnaStavka() {
            trenutnaDS++;
            if (trenutnaDS > dodatneStavke.Count - 1)
                throw new iznimke.DSNotExistException(trenutnaDS);
            return dodatneStavke[trenutnaDS];
        }

        public List<IElement> getAllDodatneStavke() {
            return dodatneStavke;
        }

        public int getBrojDodatnihStavki() {
            return dodatneStavke.Count;
        }

        #region ISkup Members

        public string getID() {
            return id;
        }

        public int getVelicinaSkupa() {
            return elementi.Count;
        }

        #endregion

        public Uzorak podskupUzorka(int velicinaPodskupa) {
            return new Uzorak(elementi.GetRange(0, velicinaPodskupa), dodatneStavke);
        }

        /// <summary>
        /// sadrzi li dani element u osnovnom skupu i dodatnim stvkama
        /// </summary>
        public bool sadrziElement(int idElementa) {
            foreach (IElement item in elementi) {
                if (item.getID() == idElementa)
                    return true;
            }
            foreach (IElement item in dodatneStavke) {
                if (item.getID() == idElementa)
                    return true;
            }
            return false;
        }

        public void addElement(IElement element) {
            elementi.Add(element);
        }

        public void addDodatnaStavka(IElement dodatnaS) {
            dodatneStavke.Add(dodatnaS);
        }
    }
}
